static char *
read_wcstr(const int discard)
{
- short *buff = NULL, c;
+ gbint16 *buff = NULL, c;
int size = 0, pos = 0;
- while ((c = gbfgetint16(fin))) {
+ while (gbfread(&c, sizeof(c), 1, fin) && (c != 0)) {
if (size == 0) {
size = 16;
- buff = xmalloc(size * 2);
+ buff = xmalloc(size * sizeof(*buff));
}
else if (pos == size) {
size += 16;
- buff = xrealloc(buff, size * 2);
+ buff = xrealloc(buff, size * sizeof(*buff));
}
buff[pos] = c;
pos += 1;
static char *
psp_read_str(gbfile *fin)
{
- int i, len;
+ int len;
gbint16 *buff;
char *res;
len = (unsigned char)gbfgetc(fin);
if (len == 0) return NULL;
- buff = xmalloc(len * 2);
- for (i = 0; i < len; i++)
- buff[i] = gbfgetint16(fin);
+ buff = xmalloc(len * sizeof(*buff));
+ gbfread(buff, sizeof(*buff), len, fin);
res = cet_str_uni_to_utf8(buff, len);
xfree(buff);
+
return res;
}